/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.bean.impl;

import fr.generali.accueilclient.client.bean.IPersonneBean;
import fr.generali.accueilclient.client.om.IPersonne;

/**
 * @author Holmes Kelly
 */
public class PersonneBeanDecorateur extends AbstractPersonneBean {

    /**
     * @param personne personne
     */
    public PersonneBeanDecorateur(IPersonne personne) {
        super(personne);

    }

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean equals(Object obj) {

        boolean isEqual = false;

        if (this == obj) {

            return true;
        }

        if (obj != null && obj.getClass().getName().equals(this.getClass().getName())) {
            final IPersonneBean personneBeanCompare = (IPersonneBean ) obj;

            boolean isPersonneBeanNonNull = this.getPersonne() != null && this.getIdClientCie() != null;
            boolean isPersonneBeanCompareNonNull =
                            personneBeanCompare.getPersonne() != null && personneBeanCompare.getIdClientCie() != null;

            boolean isPersonneBeanNull = this.getPersonne() == null && this.getIdClientCie() == null;
            boolean isPersonneBeanCompareNull =
                            personneBeanCompare.getPersonne() == null && personneBeanCompare.getIdClientCie() == null;

            if (isPersonneBeanNonNull && isPersonneBeanCompareNonNull) {

                isEqual = this.getIdClientCie().equals(personneBeanCompare.getIdClientCie());
            }

            if (isPersonneBeanNull && isPersonneBeanCompareNull) {

                isEqual = super.equals(obj);
            }
        }

        return isEqual;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public int hashCode() {

        int hashCode = 0;

        int multiplier = 33;

        boolean isPersonneBeanNonNull = this.getPersonne() != null && this.getIdClientCie() != null;
        boolean isPersonneBeanNull = this.getPersonne() == null && this.getIdClientCie() == null;

        if (isPersonneBeanNonNull) {

            hashCode = multiplier * hashCode + this.getIdClientCie().hashCode();
        }

        if (isPersonneBeanNull) {

            return super.hashCode();
        }

        return hashCode;
    }

}
